package com.example.mapper;

import com.example.entity.SysMenu;
import com.example.entity.SysPermission;
import com.example.entity.SysRole;
import com.example.entity.SysUser;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * TODO
 * 用户相关操作
 * @Comment：最难的一次作业
 * @Date: 2023/11/18
 */

public interface SysUserMapper {

    //根据用户名获取用户对象
    SysUser findByUsername(@Param("value") String value);

    //根据用户id查询权限信息
    List<SysRole> findRoles(@Param("userId") Long userId);

    //根据用户id查询菜单信息
    List<SysMenu> findMenus(@Param("userId") Long userId);

    //根据父级id和用户id查询子级菜单信息（id：父级id，userId：用户id）
    List<SysMenu> findChildrenMenus(@Param("id") Long id, @Param("userId") Long userId);

    //根据用户id查询权限数据
    List<SysPermission> findPermissions(@Param("userId") Long userId);

    // 根据字符串 分页查询用户信息
    Page<SysUser> findPage(String queryString);

    // 添加用户信息
    void insert(SysUser user);

    // 微信小程序进入添加
    @Insert("insert into sys_user(open_id, status) values (#{openid}, 0)")
    void insertOpenid(@Param("openid") String openid);

    // 修改用户信息
    void update(SysUser user);

    // 删除用户信息
    void delete(Long id);

    // 根据用户信息中的角色列表，取添加用户的角色
    void insertUserRoles(@Param("userId") Long userId, @Param("roleId") Long roleId);

    // 根据用户id，去删除用户的角色列表
    void deleteRolesByUserId(@Param("userId") Long userId);

    // 根据用户id查询用户信息
    SysUser findById(Long id);

    /**
     * 根据邮箱修改密码
     * email : 用户邮箱
     * password : 新密码
     * */
    @Update("update sys_user set `password` = #{password} where email = #{email}")
    void updatePwdByMail(@Param("email") String email, @Param("password") String password);

    /**
     * 根据openid更新用户信息
     * */
    void updateByopenId(SysUser user);
}
